package com.example.dto;

import lombok.Data;

@Data
public class UserDTO {
    private Long id;
    private String nickName;
    private String icon;
}
/**
 * DTO 是 Data Transfer Object（数据传输对象） 的缩写，中文一般翻译成“数据传输对象”或“数据传递对象”。
 * 它是一种 设计模式，主要用于：
 * 在不同系统层之间（如 Controller → Service → DAO）传递数据，但不直接暴露数据库的实体类（如 User 实体）。
 * <p>
 * UserDTO 就是“用于表示用户数据的传输对象”，它不是数据库的实体类，而是一个用于控制层与前端通信的对象，目的在于数据安全、解耦和灵活处理，是软件架构中一种非常常见的设计模式。
 * 1.假设你有一个实体类 User
 * 2.你不想让前端看到用户密码，你就可以定义一个 UserDTO
 * 3.然后在业务逻辑层中将 User 映射为 UserDTO
 * 4.现在你就可以放心把 UserDTO 返回给前端，不用担心敏感信息泄露
 * <p>
 * 场景	                                    用法
 * Controller 接收请求参数	                用 DTO 接收表单数据、JSON 请求体
 * Controller 返回响应数据	                返回 DTO 给前端，保证只包含必要字段
 * Service 层参数封装	                        多个参数封装成一个 DTO，简化方法签名
 * 与前端字段不同	                            前端字段名与数据库不一致时使用 DTO 做中间层转换
 * <p>
 * 如果用户操作涉及 User 中但不属于通用 UserDTO 的字段，比如密码修改、安全验证等，就应为这些操作单独定义 专用的 DTO 类，遵循“一操作一 DTO”的设计原则，从而保障安全、解耦业务逻辑、提高可维护性。
 * 业务操作	    建议 DTO 名称	    字段包含
 * 用户注册	    UserRegisterDTO	    用户名、手机号、验证码、密码
 * 用户登录	    LoginDTO	        用户名/手机号、密码
 * 用户修改信息	UserUpdateDTO	    昵称、头像等（可选）
 * 修改手机号	    PhoneUpdateDTO	    旧手机号、新手机号、验证码
 */
